Turbo C Context File MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C MISC_LIB.LIB CAGD_LIB.LIB IRIT2RAY.C ..\MISC_LIB\IRITPRSR.C \C\POLY3D\*.C \C\MISC_LIB\*.H \C\SM\*.H ..\MISC_LIB\IRITPRSR.H *.BAK ..\SM\GEOMAT3D.C ..\SM\PROGRAM.H \C\POLY3D-R\WIGGLE.DAT ..\POLY3D-R\*.C ..\POLY3D-R\*.DAT *.GEO *.RAY *.GEOM *.DAT -P -M- -v saddle.mat saddle.bzr -M -v saddle.mat saddle.bzr arc90.bzr \c\poly3d\cube.dat \c\poly3d-r\wiggle.dat -f 7 \c\poly3d-r\wiggle.dat -f 15 \c\poly3d-r\wiggle.dat -f 5 f:\twiggle.dat -f 5 f:\t.dat -f 5 \c\poly3d-r\solid2.dat \c\poly3d-r\solid2.dat t.dat solid1c.dat solid1.dat void *.c struct *.c struct *.h for *.c void *.c printf *.c GraphicMode ScreenCursorC AllSrfs MyFree include FineNess PObject PObject -> RGB CrossP %9.6lg Trans TransColorTable[PObject -> Color] ..\CAGD_LIB\*.C ..\CAGD_LIB\CAGDMESH.C ..\CAGD_LIB\CAGDCOER.C ..\CAGD_LIB\BZR_WRT.C ..\CAGD_LIB\BZR_READ.C ..\CAGD_LIB\BZR_GEN.C ..\CAGD_LIB\CAGD_LIB.LIB CAGD_LIB.LIB MISC_LIB.LIB INTERACT.C PCGRAPH.C IRIT2RAY.C StringToken LastNormal Normal VNext VNextNext D:\C\MISC_LIB\IRITPRSR.H D:\C\IRIT2RAY\IRIT2RAY.C D:\C\POLY3D-R\COLORTBL.C D:\C\POLY3D-R\EVALCOLR.C D:\C\SM\GEOMAT3D.C D:\C\SM\PROGRAM.H F:\T.DAT F:\T.DAT D:\C\IRIT2RAY\IRIT2RAY.GEO D:\C\IRIT2RAY\IRIT2RAY.RAY D:\C\IRIT2RAY\IRIT2RAY.RAY D:\C\IRIT2RAY\IRIT2RAY.GEO D:\C\IRIT2RAY\IRIT2RAY.RAY D:\C\IRIT2RAY\IRIT2RAY.C D:\C\IRITFLTR\SOLID1.DAT D:\C\IRITFLTR\IRIT2RAY.C BGIDriverPath void GGInstallBGI(char *BGIDriverPath, char *NameMode) /***************************************************************************** * Routine to draw all the objects in object list Objects. * *****************************************************************************/ void DrawAllObjects(IPObjectStruct *Objects) while (Objects) { DrawOneObject(Objects); Objects = Objects -> Pnext; } /***************************************************************************** * Routine to draw one object Object. * *****************************************************************************/ static void DrawOneObject(IPObjectStruct *PObject) IPPolygonStruct *PList = PObject -> PPolygon; GGMySetColor(PObject -> Color); while (PList) { DrawOnePolygon(PList); PList = PList -> Pnext; } /***************************************************************************** * Routine to draw one polygon, using global Matrix transform Mat. * * Note this is the routine that makes the real drawing... * *****************************************************************************/ static void DrawOnePolygon(IPPolygonStruct *PPolygon) int i, j, DrawNextEdge, NumOfVertices; RealType MappedNormal[3], PolyNormal[3]; IPVertexStruct *VList = PPolygon -> PVertex, *VHead = VList; if (VList == NULL) return; TestQuitView(); switch (PPolygon -> Type) { case IP_POINTLIST: MoveToPtr(VList -> Coord); DrawToPtr(VList -> Coord); VList = VList -> Pnext; for (i = 0; i < GlblNumEdges && VList != NULL && VList != VHead; i++) { MoveToPtr(VList -> Coord); DrawToPtr(VList -> Coord); VList = VList -> Pnext; } break; case IP_POLYLINE: MoveToPtr(VList -> Coord); DrawNextEdge = !IP_IS_VRTX_INTERNAL(VList); VList = VList -> Pnext; for (i = 1; i < GlblNumEdges && VList != NULL && VList != VHead; i++) { if (DrawNextEdge || GlblInternal) DrawToPtr(VList -> Coord); else MoveToPtr(VList -> Coord); DrawNextEdge = !IP_IS_VRTX_INTERNAL(VList); VList = VList -> Pnext; } break; case IP_POLYGON: #ifdef __GL__ if (GlblDrawSolid) { GGMyDrawPolygonSolid(PPolygon); break; } #endif if (GlblDrawPNormal && IP_HAS_POLY_PLANE(PPolygon)) { /* Sum all points to be averaged for normal position. */ for (i = 0; i < 3; i++) PolyNormal[i] = VList -> Coord[i]; NumOfVertices = 1; } MoveToPtr(VList -> Coord); DrawNextEdge = !IP_IS_VRTX_INTERNAL(VList); VList = VList -> Pnext; for (i = 1; i < GlblNumEdges && VList != NULL && VList != VHead; i++) { if (DrawNextEdge || GlblInternal) DrawToPtr(VList -> Coord); else MoveToPtr(VList -> Coord); if (GlblDrawVNormal && IP_HAS_VRTX_NORMAL(VList)) { for (j = 0; j < 3; j++) MappedNormal[j] = VList -> Coord[j] + VList -> Normal[j] * GlblNormalLen; j = GlblClosedObject; GlblClosedObject = FALSE; DrawToPtr(MappedNormal); MoveToPtr(VList -> Coord); GlblClosedObject = j; if (GlblDrawPNormal && IP_HAS_POLY_PLANE(PPolygon)) { for (j = 0; j < 3; j++) PolyNormal[j] += VList -> Coord[j]; NumOfVertices++; DrawNextEdge = !IP_IS_VRTX_INTERNAL(VList); VList = VList -> Pnext; } if (GlblNumEdges > i) { /* Close polygon by drawing a line to first vertex. */ if (DrawNextEdge || GlblInternal) DrawToPtr(VHead -> Coord); else MoveToPtr(VHead -> Coord); if (GlblDrawVNormal && IP_HAS_VRTX_NORMAL(VList)) { for (j = 0; j < 3; j++) MappedNormal[j] = VList -> Coord[j] + VList -> Normal[j] * GlblNormalLen; j = GlblClosedObject; GlblClosedObject = FALSE; DrawToPtr(MappedNormal); MoveToPtr(VList -> Coord); GlblClosedObject = j; } if (GlblDrawPNormal && IP_HAS_POLY_PLANE(PPolygon)) { for (i = 0; i < 3; i++) PolyNormal[i] /= NumOfVertices; MoveToPtr(PolyNormal); for (i = 0; i < 3; i++) PolyNormal[i] += PPolygon -> Plane[i] * GlblNormalLen; i = GlblClosedObject; GlblClosedObject = FALSE; DrawToPtr(PolyNormal); GlblClosedObject = i; } break; } MultVecby4by4(LastCoord, Coord, CrntViewMat); /* Set last point coord. */ #define MAX_NUM_ATTRS 10 /***************************************************************************** * Attributes - geometry types (Surfaces/Curves/Polygons/Polylines) have this * * structure for keeping general attributes like colors etc. * *****************************************************************************/ typedef struct AttributeStruct { ByteType Color; /* Color of geometry. */ ByteType NumStrAttribs; char *StrAttrName[MAX_NUM_ATTRS + 1]; /* Generic string attrs. */ char *StrAttrData[MAX_NUM_ATTRS + 1]; } AttributeStruct; MAX_NUM_ATTRS if (IritPrsrWasPrspMat) MultTwo4by4(GlblViewMat, IritPrsrViewMat, IritPrsrPrspMat); else GEN_COPY(GlblViewMat, IritPrsrViewMat, sizeof(MatrixType)); #define GEN_COPY(Dest, Src, Size) memcpy(Dest, Src, Size) static int TransColorTable[][4] = { { /* BLACK */ 0, 0, 0, 0 }, { /* BLUE */ 1, 0, 0, 255 }, { /* GREEN */ 2, 0, 255, 0 }, { /* CYAN */ 3, 0, 255, 255 }, { /* RED */ 4, 255, 0, 0 }, { /* MAGENTA */ 5, 255, 0, 255 }, { /* BROWN */ 6, 50, 0, 0 }, { /* LIGHTGRAY */ 7, 127, 127, 127 }, { /* DARKGRAY */ 8, 63, 63, 63 }, { /* LIGHTBLUE */ 9, 0, 0, 255 }, { /* LIGHTGREEN */ 10, 0, 255, 0 }, { /* LIGHTCYAN */ 11, 0, 255, 255 }, { /* LIGHTRED */ 12, 255, 0, 0 }, { /* LIGHTMAGENTA */ 13, 255, 0, 255 }, { /* YELLOW */ 14, 255, 255, 0 }, { /* WHITE */ 15, 255, 255, 255 }, { /* BROWN */ 20, 50, 0, 0 }, { /* DARKGRAY */ 56, 63, 63, 63 }, { /* LIGHTBLUE */ 57, 0, 0, 255 }, { /* LIGHTGREEN */ 58, 0, 255, 0 }, { /* LIGHTCYAN */ 59, 0, 255, 255 }, { /* LIGHTRED */ 60, 255, 0, 0 }, { /* LIGHTMAGENTA */ 61, 255, 0, 255 }, { /* YELLOW */ 62, 255, 255, 0 }, { /* WHITE */ 63, 255, 255, 255 }, { -1, 0, 0, 0 } /***************************************************************************** * Routine to calculate the cross product of two vectors: * * Note Vres might be the same as V1 or V2 ! * *****************************************************************************/ void VecCrossProd(VectorType Vres, VectorType V1, VectorType V2) VectorType Vtemp; Vtemp[0] = V1[1] * V2[2] - V2[1] * V1[2]; Vtemp[1] = V1[2] * V2[0] - V2[2] * V1[0]; Vtemp[2] = V1[0] * V2[1] - V2[0] * V1[1]; VecCopy(Vres, Vtemp); #define DOT_PROD(Pt1, Pt2) (Pt1[0] * Pt2[0] + \ Pt1[1] * Pt2[1] + \ Pt1[2] * Pt2[2])